Локация | locationЛокация (location) – состояние в текстовой игре, обычно связанное с описываемым местоположением. Конструктор локацииСинтаксис:
локация имя_локации
{ [классы]
[свойства]
[формы]
[объекты]
[методы]
}
Здесь:
location хижина
{
}
Описание объектов в локации
Объекты можно описывать непосредственно внутри описаний локаций, которые их содержат.
location А
{
Б
{
//Описание объекта Б
}
}
Обработчики событий в локацияхДля обработки событий в локациях могут быть размещены методы с предопределёнными именами:
Пример:
location хибара
{ //код локации пишется в самом начале вне секций
//выполняется только 1 раз при создании локации
var запас_рыбы = 20
var запас_денег = 5
object сеть_рыбацкая{}
//после кода локации идут методы:
== _сцена ==
<location>
тут пахнет рыбой
висят сети
</location>
== _вход ==
ты вошёл в хибару.
== _выход ==
ты вышел из хибары.
}
Метод _сцена | _scene
Секция _scene выполняется в текущей локации каждый раз после обработки
команды игрока. Секция предназначена для вывода описания локации.
location хижина
{
== _сцена ==
<location>
нищая хижина.
тут ничего нет.
</location>
}
Метод _вход | _enter
Секция _enter выполняется при входе в локацию. В секции может содержаться описание
входа персонажа в локацию, изменение объектов и переменных, проверка условий и т. п.
location хижина
{
== _вход ==
ты вошёл в маленькую хижину.
}
Метод _выход | _exitСекция exit выполняется если происходит выход из текущей локации в другую. В секции может содержаться описание выхода персонажа из локации, изменение объектов и перемен- ных, проверка условий и т. п. qqq Пример: qqq location island { ==exit== if змейка.pos = island { %Ты пытаешься уйти, но змея набрасывается на тебя. %К сожалению, яд песчаной эфы смертелен. goto die } }Метод _проверка | _checkВ секции check описывается проверка возможности выполнения команды. В частности, здесь может быть проверено наличие у ГГ всех необходимых предметов, названных в команде, или соблюдены ли условия, необходимые для начала выполнения дей- ствия и т. п. Если действие невозможно, секция возвращает ошибку. В локациях секция check (проверка) вызывается каждый раз при попытке выхода из текущей локации. В этой секции можно запретить или разрешить переход в другую локацию. Переменная _location при этом содержит имя локации, в которую планируется переход. qqq Здесь имеет значение комментарий ошибки и её вес. В случае когда все возможные комбинации аргументов закончились ошибкой, комментарий ошибки с наибольшим весом будет показан игроку как реакция на его команду. qqq qqq Так как язык неоднозначен, ТОМ в процессе парсинга оперирует вариантными зна- чениями. Каждый вариант имеет свой вес. Если в результате разбора получилось несколько значений с различными весами, выбор делается в пользу самого весомого. Это же относится и к формированию ошибок. Вес ошибки зависит от секции, в которой она возникла. Ошибки в секции ==parsing== весят меньше чем ошибки в секции ==check==. То есть при выбо- ре между ==parsing== ошибка, "фраза не согласована по падежам"и ==check== ошибка, "этот ключ не подходит к двери"показана будет последняя ошибка. что такое комментарий ошибки? Ошибка, "вы умерливы умерли комментарий. qqq qqq сделать ссылку на булево и убрать лишнее из следующего абзаца: В ТОМе к любому булеву значению можно прикрепить текстовый комментарий. Это позволяет давать более естественные ответы чем "да"или "нет": да, вы правы нет, я так не думаю ошибка - это тоже одно из булевых значений. qqq Внутри локации ==check== отвечает за контроль перемещений. Пример: location island { ==check== Ok if (_location = die) or (_location = END) }Метод _фон | _backgroundСекция background текущей локации выполняется каждый раз после обработки коман- ды игрока. Секция не выполняется, если происходит переход в другую локацию. В этой секции удобно размещать код, моделирующий течение времени или различные фоновые про- цессы, происходящие в текущей локации. qqq Пример: qqq location island { ==background== if змейка.pos = island if cnt>2 then { %%Ты не двигаешься и змея понимает, что от тебя не исходит никакой %%опасности. Она уползает, и теперь ты спокойно берешь раковину. } }Название локацииНазвание локации – словосочетание, которое выводится при осмотре локации. Оно может отличаться от имени локации. Название локации быть задано с помощью ключевого слова title. Пример:
location зал
{
title = "Большой зал"
}
Типы описаний в локацииВ стандартной библиотеке в описании локаций и предметов определены следующие свой- ства: полное_описание, внешнее_описание и _описание (см. раздел 15.1 Стандарт- ные описания локаций и предметов, стр. 58).Cинонимы для локацийqqq Сделать ссылку на раздел ’Переменные’, поскольку синонимы в разделе локации – это частный случай применения переменных. Про зоны видимости этих синонимов лучше описать в переменных. qqq qqq Сделать ссылку на раздел Переменные. Там про область видимости! qqq Синоним для локации задаётся с помощью ключевого слова var.Глобальный синоним для локацийqqq Глобальные и локальные синонимы для локаций? qqq qqq Локальная переменная действует только когда персонаж находится в этой локации. Глобальная действует всегда. Если имена локальной и глобальной переменной совпадают - локальная перевешивает. Действуют те-же правила что и в с++: переменная объявленная внутри функции перебивает глобальную переменную, объявленная внутри блока перебивает и глобальную и ту что внутри функции. Эти правила не меняются когда переменная ис- пользуется для указания синонима. Локальными синонимами достигается то, что в разных ситуациях одним и тем-же словом можно называть разные объекты. Откликнется тот что ближе. qqq qqq Переделать раздел с точки зрения глобальный-локальный синонимы !!! Для локаций можно задавать глобальные синонимы. Это позволяет, в частности, давать команды перемещения между локациями с указанием предлога (например иди на причал или уйди с причала). Пример:
var в_баре = бар
loc бар
{
}
Данное описание позволяет давать команды иди в бар, идти в бар.
qqq Конструкция var в_баре = бар может располагаться как внутри описания локации,
так и вне описания.
qqq
Правила подстановки необходимо прописывать для каждого предлога. При этом необхо-
димо различать локации ’в’ и локации ’на’, иначе будут работать команды иди в причал.
Локальный синоним для нескольких локацийМожно задавать один локальный синоним для нескольких локаций. Пример:
loc в_башне
{
var башня = в_башне
}
loc на_башне
{
var башня = на_башне
}
Здесь локация ’в’ и локация ’на’ – это две разные локации. Если находится в башне, то
по команде осм башню будет осмотрена локация в_башне, а если находится на башне,
то будет осмотрена, соответственно, на_башне.
Соединение локацийЧтобы соединить локации друг с другом, необходимо разместить их на карте или указать их расположение друг относительно друга (в этом случае ТОМ присвоит им координаты автоматически). Локации, размещённые рядом, автоматически соединяются проходами. Первая созданная локация имеет координаты 0, 0, 0. Последующие локации прикрепляются относительно ранее созданных.Указание координат расположения локацийУказать координаты расположения локации можно следующим образом:
location имя_локации
{
x = координата_по_оси_X,
y = координата_по_оси_Y,
z = координата_по_оси_Z
}
Пример:
location бар
{
x = 100,
y = 100,
z = -20
}
Относительное расположение локацийРасположение локаций относительно друг друга можно задать в описании комнаты, ука- зав в каком направлении находится данная локация относительно указанной локации. Пример:
loc бар
{
}
loc причал
{
севернее бара
}
loc склад
{
западнее бара
}
В данном примере на севере от локации бар располагается причал. А на западе от бара
– склад.
Описание объектов в локации
Объекты можно описывать непосредственно внутри описаний локаций, которые их со-
держат.
Пример:
location А
{
объект Б
{
// Описание объекта Б
}
}
Смотрите также |
to do: Отформатировать. Проверить корректность. Дополнить. |